(小ネタ)Ansibleでローカル/リモートのサーバにファイルをコピーする
(小ネタ)Ansibleを使ってリモートとローカルのサーバにファイルをコピーできるのか検証しました。
はじめに
こんにちは。AC20周年のサントラ発売で浮かれている闘争を求める民佐々木です。
今回は小ネタですがAnsibleを使ったファイルコピーで検証したことがあったのでメモ程度に記事にしてみます。
やりたいこと
前提として実現したかったことは以下のようなことです。
- Ansibleを使って所定のディレクトリへファイルをコピーしたい。ファイルはplaybookと一緒にリポジトリで管理する
- Ansibleは次の2パターンで実行する
- ローカルからリモートのサーバへSSHへ実行する(ローカルからファイルをコピー)
- サーバ上でPlaybookをチェックアウトしてサーバ内でコピーする
できれば同じPlaybookでできたら嬉しいですね。いいか、俺は面倒が嫌いなんだ。
検証の方法
次のような方法で検証しました。
- ローカル→ローカルでファイルをコピーするPlaybookを作る
- 1.のPlaybookをリモートのホストに対して実行する
Playbook
Playbookはcopy moduleのドキュメントを参照して素直に下記のように記述しました。
- hosts: targets become: yes tasks: - name: copy files copy: src: "{{ item }}" dest: /tmp/copy_here/ owner: root group: root mode: 0644 with_fileglob: - ./files/*.txt
またインベントリファイルは下記の通りです。
[targets] localhost ansible_connection=local <リモートサーバのホスト名> ansible_ssh_private_key_file=~/.ssh/your_key_is_here.pem
結果
下記の通り2つのホスト上でコピーが行えました。
ec2-user@ip-172-31-22-225 copy_ansible]$ ansible-playbook -i hosts copy_task.yml PLAY [targets] ************************************************************************************************************************************************************************************************************************************************************************************************************************************************************* TASK [Gathering Facts] ***************************************************************************************************************************************************************************************************************************************************************************************************************************************************** ok: [localhost] ok: [172.31.21.85] TASK [copy files] ********************************************************************************************************************************************************************************************************************************************************************************************************************************************************** changed: [localhost] => (item=/home/ec2-user/copy_ansible/./files/hoge.txt) changed: [172.31.21.85] => (item=/home/ec2-user/copy_ansible/./files/hoge.txt) changed: [localhost] => (item=/home/ec2-user/copy_ansible/./files/fuga.txt) changed: [172.31.21.85] => (item=/home/ec2-user/copy_ansible/./files/fuga.txt) PLAY RECAP ***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** 172.31.21.85 : ok=2 changed=1 unreachable=0 failed=0 localhost : ok=2 changed=1 unreachable=0 failed=0
ローカルで確認
[ec2-user@ip-172-31-22-225 copy_ansible]$ ls -l /tmp/copy_here/ 合計 0 -rw-r--r-- 1 root root 0 7月 12 07:47 fuga.txt -rw-r--r-- 1 root root 0 7月 12 07:47 hoge.txt
リモートで確認
[ec2-user@ip-172-31-22-225 copy_ansible]$ ssh -i ~/.ssh/ec2-default.pem ec2-user@172.31.21.85 "ls -l /tmp/copy_here/" 合計 0 -rw-r--r-- 1 root root 0 7月 12 07:47 fuga.txt -rw-r--r-- 1 root root 0 7月 12 07:47 hoge.txt
最後に
世に平穏のあらんことを